/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package op.filtros;

import core.FiltraLigacao;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import op.ContaTelefonica;
import op.Ligacao;
import op.Telefone;

/**
 *
 * @author Jônatas
 */
public class FiltraCelularOuFixo implements FiltraLigacao {

    public enum TipoFiltro {

        FIXO(new char[]{'1', '2', '3', '4', '5'}), CELULAR(new char[]{'6', '7', '8', '9'});

        private TipoFiltro(char[] permitedValues) {
            this.permitedValues = permitedValues;
        }
        private char[] permitedValues;

        public char[] getPermitedValues() {
            return permitedValues;
        }
    }
    private TipoFiltro tipoFiltro;

    public FiltraCelularOuFixo(TipoFiltro tipoFiltro) {
        this.tipoFiltro = tipoFiltro;
    }

    public ContaTelefonica execute(ContaTelefonica contaOriginal) {
        List<Ligacao> ligacoesOriginais = contaOriginal.getLigacoes();
        List<Ligacao> ligacoesFiltradas = new ArrayList<Ligacao>();
        char[] permitedValues = tipoFiltro.getPermitedValues();

        for (Ligacao ligacao : ligacoesOriginais) {

            Telefone destino = ligacao.getDestino();
            if (destino != null && !destino.isDiferente()) {
                if (Arrays.binarySearch(permitedValues, destino.getNumParte1().charAt(0)) >= 0) {
                    ligacoesFiltradas.add(ligacao);
                }
            }

        }

        ContaTelefonica resposta = new ContaTelefonica(contaOriginal.getContaMensal());
        resposta.setLigacoes(ligacoesFiltradas);
        return resposta;

    }
}
